<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        
    </style>
</head>
<body>
    
</body>
<script>

    // 类
    function fn(m){
        this.msg = m;
    }
    // 规范
    fn.prototype.show = function(){
        console.log(this.msg);
    }

    // 使用

    const f1 = new fn("hello world");
    const f2 = new fn("hello qf");

    console.log( f1 );
    console.log( f2 );

    console.log( f1.msg );
    console.log( f2.msg );

    f1.show();
    f2.show();

    console.log(f1.show === f2.show);

    // 最终语法口诀：
    // 属性写在构造函数中
    // 方法写在原型上
    // 构造函数中的this指向了实例
    // 原型上的方法中的this指向了实例

    // 注意事项：
    // 为了防止构造函数被直接执行（后果会产生大量全局信息），一般会使用大驼峰式命名构造函数的名字，小驼峰式命名正常函数的名字

</script>
</html>